namespace WeWorkApp.Api.Models.WeChat
{
    /// <summary>
    /// 企业微信客户详情数据传输对象
    /// </summary>
    public class CustomerDetailDto
    {
        /// <summary>
        /// 外部联系人的userid，注意不是企业成员的帐号
        /// </summary>
        public string ExternalUserId { get; set; } = string.Empty;

        /// <summary>
        /// 外部联系人的名称
        /// </summary>
        public string Name { get; set; } = string.Empty;

        /// <summary>
        /// 外部联系人头像，第三方不可获取
        /// </summary>
        public string Avatar { get; set; } = string.Empty;

        /// <summary>
        /// 外部联系人的类型，1表示该外部联系人是微信用户，2表示该外部联系人是企业微信用户
        /// </summary>
        public int Type { get; set; }

        /// <summary>
        /// 外部联系人性别 0-未知 1-男性 2-女性
        /// </summary>
        public int Gender { get; set; }

        /// <summary>
        /// 外部联系人在微信开放平台的唯一身份标识（微信unionid），通过此字段企业可将外部联系人与公众号/小程序用户关联起来。仅当联系人类型是微信用户，且企业或第三方服务商绑定了微信开发者ID有此字段。
        /// </summary>
        public string UnionId { get; set; } = string.Empty;

        /// <summary>
        /// 外部联系人的职位，如果外部企业或用户选择隐藏职位，则不返回，仅当联系人类型是企业微信用户时有此字段
        /// </summary>
        public string Position { get; set; } = string.Empty;

        /// <summary>
        /// 外部联系人所在企业的简称，仅当联系人类型是企业微信用户时有此字段
        /// </summary>
        public string CorpName { get; set; } = string.Empty;

        /// <summary>
        /// 外部联系人所在企业的主体名称，仅当联系人类型是企业微信用户时有此字段
        /// </summary>
        public string CorpFullName { get; set; } = string.Empty;

        /// <summary>
        /// 跟进人信息列表
        /// </summary>
        public List<FollowUserDto> FollowUsers { get; set; } = new List<FollowUserDto>();
    }

    /// <summary>
    /// 跟进人信息
    /// </summary>
    public class FollowUserDto
    {
        /// <summary>
        /// 添加了此外部联系人的企业成员userid
        /// </summary>
        public string UserId { get; set; } = string.Empty;

        /// <summary>
        /// 该成员对此外部联系人的备注
        /// </summary>
        public string Remark { get; set; } = string.Empty;

        /// <summary>
        /// 该成员对此外部联系人的描述
        /// </summary>
        public string Description { get; set; } = string.Empty;

        /// <summary>
        /// 该成员添加此外部联系人的时间
        /// </summary>
        public long CreateTime { get; set; }

        /// <summary>
        /// 该成员添加此客户的来源
        /// </summary>
        public AddWayDto AddWay { get; set; } = new AddWayDto();

        /// <summary>
        /// 发起添加的userid，如果成员主动添加，为成员的userid；如果是客户主动添加，则为客户的外部联系人userid；如果是内部成员共享/管理员分配，则为对应的成员userid
        /// </summary>
        public string OperUserId { get; set; } = string.Empty;

        /// <summary>
        /// 企业自定义的state参数，用于区分客户具体是通过哪个「联系我」添加，由企业通过创建「联系我」方式指定
        /// </summary>
        public string State { get; set; } = string.Empty;

        /// <summary>
        /// 标签信息
        /// </summary>
        public List<TagDto> Tags { get; set; } = new List<TagDto>();
    }

    /// <summary>
    /// 添加方式信息
    /// </summary>
    public class AddWayDto
    {
        /// <summary>
        /// 添加方式：0-未知来源 1-扫描二维码 2-搜索手机号 3-名片分享 4-群聊 5-手机通讯录 6-微信联系人 7-来自微信的添加好友申请 8-安装第三方应用时自动添加的客服人员 9-搜索邮箱 201-内部成员共享 202-管理员分配
        /// </summary>
        public int Type { get; set; }

        /// <summary>
        /// 场景值，字符串类型，由开发者自定义
        /// </summary>
        public string Scene { get; set; } = string.Empty;
    }

    /// <summary>
    /// 标签信息
    /// </summary>
    public class TagDto
    {
        /// <summary>
        /// 该成员添加此外部联系人所打标签的分组名称（标签功能需要企业微信升级到2.7.5及以上版本）
        /// </summary>
        public string GroupName { get; set; } = string.Empty;

        /// <summary>
        /// 该成员添加此外部联系人所打标签名称
        /// </summary>
        public string TagName { get; set; } = string.Empty;

        /// <summary>
        /// 该成员添加此外部联系人所打标签类型, 1-企业设置, 2-用户自定义
        /// </summary>
        public int Type { get; set; }

        /// <summary>
        /// 该成员添加此外部联系人所打企业标签的id，用户自定义类型标签（type=2）不返回
        /// </summary>
        public string TagId { get; set; } = string.Empty;
    }
}